kafka key的作用一探究竟,详解Kafka生产者和消费者的工作原理!
点击上方蓝色字体,选择“设为星标”
回复”资源“获取更多惊喜
主题和日志
提供了负载均衡的能力,实现了系统的高伸缩性。
不同的分区能够被放置到不同节点的机器上,而数据的读写操作也都是针对分区这个粒度而进行的,这样每个节点的机器都能独立地执行各自分区的读写请求处理。
可以通过添加新的节点机器来增加整体系统的吞吐量。
Kafka分区的设计逻辑和ES分片的设计逻辑是相同的。
生产者分区策略
轮询策略:Round-robin 策略,即顺序分配,
轮询策略有非常优秀的负载均衡表现,它总是能保证消息最大限度地被平均分配到所有分区上,故默认情况下它是最合理的分区策略。(默认、常用)随机策略:Randomness 策略。所谓随机就是我们随意地将消息放置到任意一个分区上。
消息键保序策略:key-ordering 策略,Kafka 中每条消息都会有自己的key,一旦消息被定义了 Key,那么你就可以保证同一个
Key 的所有消息都进入到相同的分区里面,由于每个分区下的消息处理都是有顺序的
通过指定key的方式,具有相同key的消息会分发到同一个partition
partition会内部对其进行排序,保证其有序性。
Kafka的消息压缩机制
一般情况下压缩机制:在生产者端解压、Broker端保持、消费者端解压
Kafka 支持 4 种压缩算法:GZIP、Snappy 、LZ4,从 2.1.0 开始,Kafka 正式支持 Zstandard
算法(简写为 zstd)。压缩机制本质上以消费者端CPU性能换取节省网络传输带宽以及Kafka Broker端的磁盘占用。
Broker端和Producer端采用了不同的压缩算法
Broker端发生了消息格式转换(如过集群中同时保存多种版本的消息格式。为了兼容老版本,Broker会将消息转换为老版本格式,这对性能影响很大,而且会丧失Zero
Copy的特性)
消息可靠性
消息幂等性和事务
只能保证单分区上的幂等性,即一个幂等性 Producer 能够保证某个主题的一个分区上不出现重复消息,它无法实现多个分区的幂等性。
只能实现单会话上的幂等性,不能实现跨会话的幂等性。这里的会话,可以理解为 Producer 进程的一次运行。当你重启了 Producer
进程之后,这种幂等性保证就丧失了。
探究Kafka消费者的工作原理
消费者组
consumer group下可以有一个或多个consumer instance,consumer
instance可以是一个进程,也可以是一个线程(所以消费者可以采用多线程的方式去消费消息)group.id是一个字符串,唯一标识一个consumer group
consumer group下订阅的topic下的每个分区只能分配给某个group下的一个consumer(当然该分区还可以被分配给其他group)
自动提交:在kafka拉取到数据之后就直接提交,这样很容易丢失数据
手动提交:成功拉取数据之后,对数据进行相应的处理之后再进行提交。如拉取数据之后进行写入mysql这种 (存在数据处理失败的可能性),
所以这时我们就需要进行手动提交kafka的offset下标。
Rebalance机制
Grafana Labs发布企业级日志记录解决方案Enterprise Logs